home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
games
/
hitton
/
htn_src.lzh
/
HTN_SRC
/
HTN_TITL.C
< prev
Wrap
Text File
|
2000-07-03
|
6KB
|
279 lines
/* 『ひっとん』 ver.1.00 タイトル部 (HTN_TITL.C) 2000 TAU Software */
# include "HTN_DEF.H"
/*** タイトル用マクロ ***/
# define FIRST_WAIT 125 /* タイトル表示までの時間 */
# define NEXTL_WAIT 25 /* 「ひっとん」表示間隔 */
# define SEL_WAIT 30 /* 選択肢表示までの時間 */
# define TITBAK_WAIT 10 /* タイトルバックカラー変更時間 */
# define RANK_WAIT 500 /* ランキング画面表示時間 */
# define SET_TITBAK_CL(cl) for(i=1;i<17;i++){ \
GPALET(i*2+2,HSVTORGB((cl),8,i*1.4+2)); \
GPALET(i*2+3,HSVTORGB((cl),8,i*1.4+2)); }
/* タイトルバックカラー */
# define S_PAL(cl) (50716+(cl)*12682) /* 選択肢パネル背景色 */
/*** 音楽演奏 ***/
void PLAY_MUS(no)
int no;
{
static int pno=-1;
int pl[20][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16},
{17,0,0,0},{18,0,0,0},{19,0,0,0},{20,0,0,0},{21,0,0,0},
{22,0,0,0},{23,0,0,0},{24,0,0,0},{25,0,0,0},{26,0,0,0}};
if(CNF_STAT(1,-1)){
if(!no) m_fadeout(85);
else{
if(no > 100){
no-=100;
m_fadeout(0);
m_cont(*(*(pl+no)),*(*(pl+no)+1),*(*(pl+no)+2),*(*(pl+no)+3),
0,0,0,0,0,0);
} else{
no--;
if(no < 4){
if(no!=-1){
m_stop(*(*(pl+pno)) ,*(*(pl+pno)+1),
*(*(pl+pno)+2),*(*(pl+pno)+3),0,0,0,0,0,0);
} else m_stop(0,0,0,0,0,0,0,0,0,0);
m_fadeout(0);
}
m_play(*(*(pl+no)),*(*(pl+no)+1),*(*(pl+no)+2),*(*(pl+no)+3),
0,0,0,0,0,0);
if(no < 4) pno=no;
}
}
}
}
/*** ポーズ ***/
/* [返り値] 0:通常 0x8000:強制終了 */
int PAUSE()
{
int stat=3; /* ステイタス */
int jd;
while(stat){
jd=JOY0(2);
if(jd&0x8000){ stat=0x8000; break; } /* 強制終了 */
switch(stat){
case 3:
case 1: if(!(jd&0x4060)) stat--; /* [F6]を離しているか */
break;
case 2: if(jd&0x4060) stat--; /* [F6]を押しているか */
}
}
return stat;
}
/*** ランキング画面 ***/
/* [返り値] 0:タイトルへ戻る -1:強制終了 */
int RANKING0(wait)
{
int i,st,tm;
int rt=0; /* 返り血用 */
SCROLL2(0,256,0); SCROLL2(1,256,0);
for(i=0;i<5;i++){
PRINT_MES( 34,i*25+110,RECS_DATA(i,NULL)->name,i+1);
PRINT_TXNUM(114,i*25+111,RECS_DATA(i,NULL)->score,1,6,i+1);
PRINT_TXNUM(175,i*25+111,RECS_DATA(i,NULL)->block,1,4,i+1);
PRINT_TXNUM(219,i*25+111,RECS_DATA(i,NULL)->level,1,2,i+1);
}
VDISP0();
VPAGE2(0x6F);
tm=ONTIME();
while(1){
st=JOYINP0(2);
if(wait != -1) if(D_TIME(tm)>wait && ((JOY0(2)&1)==0)) break;
if(st & 0x8000){ rt=-1; break; }
if(st&32) break;
}
VDISP0();
VPAGE2(0);
TXFILL0(0,0,256,256,15,0);
return rt;
}
/*** メインタイトル ***/
/* [返り値] 選択コマンド (-1:強制終了) */
int MAIN_TITLE()
{
int i,z; /* 雑用 */
int tm,wtm; /* タイムカウンタ、待時間 */
int ck=1; /* タイトル表示効果キャンセルチェック */
int stat=-9,nst; /* ステイタス、次のステイタス */
int st,s0,pst,sd; /* ジョイ入力、記憶、1つ前の入力、dummy */
static int cl=96; /* 色のカウンタ */
static int com=0,pcom=0; /* 選択されているコマンド */
int log_ptn[4]={ 54,48,44,51 }; /* 『ひっとん』ロゴ表示用 */
/*for(i=0;i<6;i++) GPALET(i+36,50716+((i/2)==com)*12682);*/
for(i=0;i<6;i++) GPALET(i+36,S_PAL((i/2)==com));
APAGE(0);
FILL0(0,256,256,228,0);
SCROLL2(0,0,256); SCROLL2(1,0,256);
VDISP0();
VPAGE2(0x6F);
PLAY_MUS(1);
i=0; z=0;
wtm=FIRST_WAIT; nst=-1;
JOYINP0(2);
tm=ONTIME();
while(1){
st=JOYINP0(2);
if(st & 0x4000){
tm=D_TIME(tm);
st|=PAUSE();
tm=D_TIME(tm);
}
if(st & 0x8000){ com=-1; break; }
if(st&32){
if(stat < 0){ wtm=0; ck=0; }
else{
PLAY_MUS(8);
break;
}
}
switch(stat){
case 0: if(D_TIME(tm) >= TITBAK_WAIT){
tm=ONTIME();
cl++; cl%=192;
VDISP0();
SET_TITBAK_CL(cl)
}
if((st&3)==1 || (st&3)==2){
VDISP0();
GPALET(36+com*2,S_PAL(0)); GPALET(37+com*2,S_PAL(0));
com+=(((st>>1)&1)-(st&1)+3); com%=3;
PLAY_MUS(9);
GPALET(36+com*2,S_PAL(1)); GPALET(36+com*2,S_PAL(1));
}
break;
case -1: VDISP0();
GRM_GP(z+32,272,*(log_ptn+i),65,HTN_LOG0+z*65,0);
if(i == 3){ i=0; wtm=SEL_WAIT*ck; nst=-5; }
else{ z+=*(log_ptn+(i++)); wtm=NEXTL_WAIT*ck; }
stat=-9;
tm=ONTIME();
break; /* 『ひっとん』表示 */
case -5: VDISP0();
GRM_GP(65,i*39+350,128,28,SEL_PNL(i),0);
if(i == 2){ stat=0; tm=ONTIME(); } else i++;
break; /* メニュー表示 */
case -9: if(D_TIME(tm) >= wtm) stat=nst;
break; /* wait */
}
}
VDISP0();
VPAGE2(0);
return com;
}
/*** タイトル部のメインプログラム ***/
int TITLE0()
{
int i;
short int tit_pal[36]; /* タイトル用カラーコード記憶用 */
short int tx_pal[16]={ 0,19026,34814, 2046,65504,65472,64544,63488,
49120,32704,48190,30782,34786, 1984,33854,30782 };
int com; /* コマンド番号 */
char vspm; /* ビデオ・コントローラ:特殊モード の記憶用 */
char vprm; /* ビデオ・コントローラ:プラオリティ の記憶用 */
vspm=B_BPEEK((unsigned char *)0xE82600); /* 特殊モードの設定値保存 */
vprm=B_BPEEK((unsigned char *)0xE82500); /* プライオリティの設定値保存 */
VC_SP(0x1E); /* GRAPHIC画面0と1の半透明 */
VC_PR(0x12); /* テキスト>スプライト>ラフィック */
for(i=0;i<36;i++) *(tit_pal+i)=GPALET(i,-1);
SET_TITBAK_CL(96);
PRINT_MES(303, 94,"ヒットヤッスミッ!",4);
PRINT_MES(303,216,"ヒットヤッスミッ!",4);
while(1){
com=MAIN_TITLE(); /* メインタイトルへ */
switch(com){
case 0: /* ゲーム画面へ */
PLAY_MUS(3);
if((com=HTN_GAME0()) == -1) break;
PLAY_MUS(0);
com=RANKING0(RANK_WAIT);
break;
case 1: /* ゲーム画面へ */
PLAY_MUS(2);
com=RANKING0(-1);
break;
case 2: /* 終了 */
com=-1;
}
if(com == -1) break; /* 終了 */
}
VC_PR(vprm); /* プライオリティの設定を元に戻す */
VC_SP(vspm); /* 特殊モードの設定を元に戻す */
}